package Modelo;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */



import Modelo.Docente;
import Modelo.Estudiante;
import Modelo.Evaluacion;
import Modelo.Pregunta;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.ArrayList;

/**
 *
 * @author Usuario
 */
public class AccesoDatosResponderEvaluacion  {

    Connection conexion;
    ResultSet consulta;

    public AccesoDatosResponderEvaluacion() {
    }


    public void conectar() {
        try {
            Class.forName("org.postgresql.Driver");
            conexion = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/sistemaEvaluaciones", "postgres", "admin");
            System.out.println("Se conecto a la base de datos");
        } catch (Exception e) {
            System.out.println("No se pudo conectar a la base de datos " + e);
        }
    }


    public void desconectar() {
        try {
            consulta.close();
            conexion.close();
            System.out.println("Se desconecto correctamente de la base de datos");
        } catch (Exception e) {
            System.out.println("No se pudo desconectar de la base de datos " + e);
        }
    }
    
    public Evaluacion consultarEvaluacion(int idEvaluacion) {
        Evaluacion evaluacion = null;
        ArrayList<Pregunta> preguntas;
        try {
            preguntas = consultarPreguntas(idEvaluacion);
            conectar();
            consulta = conexion.createStatement().executeQuery("select * from tbl_evaluaciones where id = '" + idEvaluacion + "'");
                String id_evaluacion = "";
            String descripcion = "";
            String fecha = "";
            int id_docente = 0;
            while (consulta.next()) {
                id_evaluacion = consulta.getObject(consulta.getMetaData().getColumnLabel(1)).toString();
                descripcion = consulta.getObject(consulta.getMetaData().getColumnLabel(2)).toString();
                fecha = consulta.getObject(consulta.getMetaData().getColumnLabel(3)).toString();
                id_docente = Integer.parseInt(consulta.getObject(consulta.getMetaData().getColumnLabel(4)).toString());
            }
            evaluacion = new Evaluacion(id_evaluacion, descripcion,id_docente, fecha, preguntas);
            desconectar();
        } catch (Exception e) {
            System.out.println("Error al intentar consultar evaluaciones: " + e);
        }
        return evaluacion;
    }



    public ArrayList consultarPreguntas(int idEvaluacion) {
        ArrayList <Pregunta> preguntas = new ArrayList<Pregunta>();
        try {
            conectar();
            consulta = conexion.createStatement().executeQuery("select p.id, p.texto, p.tipo, p.respuesta, p.id_competencia, p.estado from tbl_preguntas p, tbl_evaluaciones_preguntas e where p.id = e.id_pregunta and e.id_evaluacion ='" + idEvaluacion + "'");
            while (consulta.next()) {
                Pregunta pregunta = new Pregunta();
                String idPregunta = consulta.getObject(consulta.getMetaData().getColumnLabel(1)).toString();
                String texto = consulta.getObject(consulta.getMetaData().getColumnLabel(2)).toString();
                String tipo = consulta.getObject(consulta.getMetaData().getColumnLabel(3)).toString();                
                String respuesta = consulta.getObject(consulta.getMetaData().getColumnLabel(4)).toString();
                String idCompetencia = consulta.getObject(consulta.getMetaData().getColumnLabel(5)).toString();
                String estado = consulta.getObject(consulta.getMetaData().getColumnLabel(6)).toString();
                pregunta = new Pregunta(idPregunta, texto, tipo, respuesta, idCompetencia, estado);
                preguntas.add(pregunta);
            }
            desconectar();
        } catch (Exception e) {
            System.out.println("Error al intentar consultar preguntas para una evaluacion: " + e);
        }
        return preguntas;
    }


    public ArrayList<Evaluacion> consultarEvaluaciones(int idEstudiante) {
        ArrayList<Evaluacion> evaluaciones = new ArrayList<Evaluacion>();
        ArrayList<Pregunta> preguntas = new ArrayList<Pregunta>();
        ResultSet consulta2;
        try {
            conectar();
            String sql = "select ev.id, ev.descripcion, ev.fecha, ev.id_docente from tbl_evaluaciones ev, tbl_evaluaciones_estudiantes ee where ev.id = ee.id_evaluacion and ee.id_estudiante = '" + idEstudiante + "'";
            consulta = conexion.createStatement().executeQuery(sql);
            while (consulta.next()) {
                String idEvaluacion =consulta.getObject(consulta.getMetaData().getColumnLabel(1)).toString();
                String titulo = consulta.getObject(consulta.getMetaData().getColumnLabel(2)).toString();
                String sql2 = "select p.id, p.texto, p.tipo, p.respuesta, p.id_competencia, p.estado from tbl_preguntas p, tbl_evaluaciones_preguntas ep where p.id = ep.id_pregunta and ep.id_evaluacion = '" + idEvaluacion + "'";
                consulta2 = conexion.createStatement().executeQuery(sql2);
                while (consulta2.next()) {
                    Pregunta pregunta;
                    String idPregunta = consulta2.getObject(consulta2.getMetaData().getColumnLabel(1)).toString();
                    String texto = consulta2.getObject(consulta2.getMetaData().getColumnLabel(2)).toString();
                    String tipo = consulta2.getObject(consulta2.getMetaData().getColumnLabel(3)).toString();                    
                    String respuesta = consulta2.getObject(consulta2.getMetaData().getColumnLabel(4)).toString();
                    String idCompetencia =consulta2.getObject(consulta2.getMetaData().getColumnLabel(5)).toString();
                    String estado = consulta2.getObject(consulta2.getMetaData().getColumnLabel(6)).toString();
                    pregunta = new Pregunta(idPregunta, texto, tipo, respuesta, idCompetencia, estado);
                    preguntas.add(pregunta);
                }
                Evaluacion evaluacion = new Evaluacion(idEvaluacion, titulo, preguntas);
                preguntas = new ArrayList<Pregunta>();
                evaluaciones.add(evaluacion);
            }
            desconectar();
        } catch (Exception e) {
            System.out.println("Error al intentar consultar las evaluaciones del estudiante: " + e);
        }
        return evaluaciones;
    }
}
